import { PageParams } from '@/type/common'
import http, { HttpResponse } from '../http'

/**
 * 会员相关信息
 * */
// 会员等级枚举
export enum MemberLevelEnum {
    '花朝铜卡' = 1,
    '桐夏银卡' = 2,
    '兰秋金卡' = 3,
    '霜华黑卡' = 4,
    '谷雨钻卡' = 5
}

// 会员状态 - 文本枚举
export enum MemberStatusEnum {
    '沉睡' = 1,
    '正常' = 2,
    '活跃' = 3
}

// 会员状态 - 图标枚举
export enum MemberStatusIconEnum {
    /** @description 沉睡图标 */
    'Drizzling' = 1,
    /** @description 正常图标 */
    'PartlyCloudy' = 2,
    /** @description 活跃图标 */
    'Sunny' = 3
}

/**
 * 会员列表相关接口
 * */

// 请求参数 - 会员列表查询信息
export interface MemberListSearchParams {
    /** @description 会员昵称 */
    username: string
    /** @description 会员卡号 */
    memberCardId: string
    /** @description 手机号 */
    userPhone: string
    /** @description 会员等级 */
    memberLevel: number | null
    /** @description 时间范围绑定值 */
    timeRangeValue: string[]
    /** @description 时间范围请求值 */
    timeRange: string[]
}

// 请求参数 - 会员列表
type MemberListParams = MemberListSearchParams & PageParams

// 请求结果 - 会员列表
export interface MemberDetailData {
    /** @description 会员id */
    userId: number
    /** @description 会员名称 */
    username: string
    /** @description 会员头像 */
    userAvatar: string
    /** @description 会员id */
    gender: 0 | 1 | null
    /** @description 会员卡号 */
    memberCardId: string
    /** @description 会员等级 */
    memberLevel: number
    /** @description 会员等级名称 */
    memberLevelName?: string
    /** @description 会员手机号 */
    userPhone: string
    /** @description 加入时间 */
    enterTime: string
    /** @description 会员身份证号 */
    memberID: string
    /** @description 会员生日 */
    birthday: string
    /** @description 会员状态 1 沉睡 2 正常 3 活跃 */
    memberStatus: 1 | 2 | 3
    /** @description 会员地区 */
    memberSource: string
}

// 请求结果 - 最终结果
interface MemberListResult extends HttpResponse {
    data: {
        total: number,
        list: Array<MemberDetailData>
    }
}

// 获取会员列表
export const httpMemberList = (params: MemberListParams): Promise<MemberListResult> => http('post', '/users/userList', params)

// 删除会员
export const httpDeleteMember = (params: { userId: number }): Promise<HttpResponse> => http('delete', '/users/deleteUser', params)

/**
 * 会员详情
 * */

// 请求参数 - 查询会员详情
export interface MemberDetailSearchParams {
    /** @description 排序规则 */
    listOrder: 'asc' | 'dsc'
    /** @description 时间区间 */
    timeRangeValue: string[]
}

// 返回结果 - 会员详情
export interface MemberDetail extends MemberDetailData {
    /** @description 年龄 */
    age: number
    /** @description 会员时长 */
    memberDuration: number
    /** @description 会员标签 */
    tagList: string[]
}

// 会员详情
export const httpUserDetail = (params: { userId: number }): Promise<HttpResponse> => http('get', '/users/userDetail', params)

// 请求参数 - 添加标签
interface AddTagParams {
    /** @description 标签名 */
    tagName: string
    /** @description 会员卡号 */
    memberCardId: string
}

// 添加标签
export const httpAddTag = (params: AddTagParams): Promise<HttpResponse> => http('get', '/users/addLabel', params)

// 返回结果 - 地区列表
export interface AreaData {
    /** @description 地区 id */
    id: number
    /** @description 地区名称 */
    regionName: string
    /** @description 地区人数数量 */
    regionMemberNum: number
}

// 返回结果 - 性别数据
export interface SexData {
    /** @description 性别描述 */
    name: string
    /** @description 性别会员数量 */
    value: number
}

// 返回结果 - 会员分析
interface MemberAnalysis {
    /** @description 会员总数 */
    memberTotal: number
    /** @description 地区分布 */
    areaData: AreaData[]
    /** @description 性别分布 */
    sexData: SexData[]
}

interface MemberAnalysisResult extends HttpResponse {
    data: MemberAnalysis
}

// 会员分析
export const httpMemberAnalysis = (): Promise<MemberAnalysisResult> => http('get', '/users/memberAnalysis')
